home *** CD-ROM | disk | FTP | other *** search
- /*
- File: ODUtils.cpp
-
- Contains: xxx put contents here xxx
-
- Owned by: David McCusker
-
- Copyright: © 1996 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <2> 3/15/96 DM 1292140: throw when persistent object has
- no storage unit getting draft or session
-
- To Do:
- */
-
- /*
- File: ODUtils.cpp
-
- Contains: Utility functions for objects
-
- Owned by: Jens Alfke
-
- Copyright: © 1994 - 1995 by Apple Computer, Inc., all rights reserved.
-
- */
-
-
- #ifndef _ODUTILS_
- #include "ODUtils.h"
- #endif
-
- #ifndef SOM_ODFrame_xh
- #include <Frame.xh>
- #endif
-
- #ifndef SOM_ODShape_xh
- #include <Shape.xh>
- #endif
-
- #ifndef SOM_ODTransform_xh
- #include <Trnsform.xh>
- #endif
-
- #ifndef SOM_Module_OpenDoc_Errors_defined
- #include <ErrorDef.xh>
- #endif
-
- #ifndef SOM_ODDocument_xh
- #include <Document.xh>
- #endif
-
- #ifndef SOM_ODContainer_xh
- #include <ODCtr.xh>
- #endif
-
- #ifndef SOM_ODStorageSystem_xh
- #include <ODStor.xh>
- #endif
-
- #ifndef _EXCEPT_
- #include <Except.h>
- #endif
-
- #ifndef _ODDEBUG_
- #include <ODDebug.h>
- #endif
-
- #ifndef SOM_ODFacet_xh
- #include <Facet.xh>
- #endif
-
- #ifndef SOM_ODWindow_xh
- #include <Window.xh>
- #endif
-
- #ifndef SOM_ODDraft_xh
- #include <Draft.xh>
- #endif
-
- #ifndef SOM_ODStorageUnit_xh
- #include "StorageU.xh"
- #endif
-
- #ifndef _TEMPOBJ_
- #include <TempObj.h>
- #endif
-
-
- void ODAcquireObject(Environment* ev, ODRefCntObject* object)
- {
- if (object != kODNULL)
- {
- object->Acquire(ev);
- }
- }
-
-
- void ODRelease( Environment *ev, ODRefCntObject* obj )
- {
- if( obj )
- obj->Release(ev);
- }
-
-
- void ODFinalRelease( Environment *ev, ODRefCntObject* obj )
- {
- if( obj ) {
- #if ODDebug
- ODULong ref = obj->GetRefCount(ev);
- if( ref != 1 ) {
- WARN("%s %p's refcount is %ld, not 1",
- obj->somGetClassName(),obj,ref);
- }
- #endif
- obj->Release(ev);
- }
- }
-
-
- void ODSafeReleaseObject( ODRefCntObject *obj )
- {
- if( obj ) {
- TRY{
- obj->Release(somGetGlobalEnvironment());
- }CATCH_ALL{
- // do nothing
- }ENDTRY
- }
- }
-
-
- void ODTransferReference( Environment *ev, ODRefCntObject *oldObj, ODRefCntObject *newObj )
- {
- if( oldObj != newObj ) {
- if( newObj )
- newObj->Acquire(ev);
- if( oldObj ) {
- TRY{
- oldObj->Release(ev);
- }CATCH_ALL{
- if( newObj ) newObj->Release(ev);
- RERAISE;
- }ENDTRY
- }
- }
- }
-
-
- ODShape* ODCopyAndRelease( Environment *ev, ODShape *s )
- {
- ASSERT(s!=kODNULL, kODErrIllegalNullInput);
- if( s->GetRefCount(ev) == 1 )
- return s;
- TempODShape tempS = s; // Ensures that s gets released
- ODShape *copy = s->Copy(ev);
- return copy;
- }
-
- ODTransform* ODCopyAndRelease( Environment *ev, ODTransform *t )
- {
- ASSERT(t!=kODNULL, kODErrIllegalNullInput);
- if( t->GetRefCount(ev) == 1 )
- return t;
- TempODTransform tempT = t; // Ensures that t gets released
- ODTransform *copy = t->Copy(ev);
- return copy;
- }
-
- #if ODDebug || !defined(_OD_IMPL_)
- ODBoolean ODObjectsAreEqual(Environment* ev, ODObject* a, ODObject* b)
- {
- return (a == b) || (a && a->IsEqualTo(ev,b));
- }
- #endif
-
-
- ODPart* ODAcquirePart( Environment *ev, ODFrame *f )
- {
- return f ?f->AcquirePart(ev) :kODNULL;
- }
-
- ODPart* ODAcquirePart( Environment *ev, ODFacet *f )
- {
- return f ?f->GetFrame(ev)->AcquirePart(ev) :kODNULL;
- }
-
-
- ODDraft* ODGetDraft( Environment *ev, ODStorageUnit *su )
- {
- return su ?su->GetDraft(ev) :kODNULL;
- }
-
- ODDraft* ODGetDraft( Environment *ev, ODPersistentObject *po )
- {
- ODDraft* draft = kODNULL;
- if ( po )
- {
- ODStorageUnit* su = po->GetStorageUnit(ev);
- if ( su )
- draft = su->GetDraft(ev);
- else
- {
- THROW(kODErrInvalidPersistentObject);
- }
- }
- return draft;
- }
-
-
- ODSession* ODGetSession( Environment *ev, ODStorageUnit *su )
- {
- return su ?su->GetSession(ev) :kODNULL;
- }
-
- ODSession* ODGetSession( Environment *ev, ODPersistentObject *po )
- {
- ODSession* session = kODNULL;
- if ( po )
- {
- ODStorageUnit* su = po->GetStorageUnit(ev);
- if ( su )
- session = su->GetSession(ev);
- else
- {
- THROW(kODErrInvalidPersistentObject);
- }
- }
- return session;
- }
-
- ODSession* ODGetSession( Environment *ev, ODDocument *d )
- {
- return d ?d->GetContainer(ev)->GetStorageSystem(ev)->GetSession(ev) :kODNULL;
- }
-
- ODSession* ODGetSession( Environment *ev, ODDraft *d )
- {
- return d ?d->GetDocument(ev)->GetContainer(ev)->GetStorageSystem(ev)->GetSession(ev) :kODNULL;
- }
-